# 获取安全文件名
from werkzeug.utils import secure_filename
from application import app,db
from common.libs.Helper import getCurrentDate
# 根据时间和硬件来生成唯一一个不重复的字符串
import os,stat,uuid
from common.models.Image import Image

class UploadService():
    @staticmethod
    def uploadByFile(file):
        # 获取上传配置
        config_upload= app.config['UPLOAD']
        resp ={'code':200,'msg':'操作成功','data':{}}
        # 上传的目录:定义一个存放目录的配置
        # 获取文件名
        filename = secure_filename(file.filename)
        # 获取文件扩展 ：文件切割（中性词是点，从第一个开始，取数组中的第一个，0是文件名，1是扩展）
        ext = filename.rsplit(".",1)[1]
        #逻辑判断： 查看扩展是否在定义中，不在的话就不能上传  config_upload['ext']是一个扩展名的数组
        if ext not in config_upload['ext']:
            resp['code']=-1
            resp['msg']="不允许的扩展类型文件"
            # 统一返回我们的字典
            return resp

        # 上传操作：在static中新建upload文件夹，以日期为每一天作为标识来存放文件
        root_path =app.root_path +config_upload['prefix_path']
        # file_dir:日期。取一个文件，以日期作为文件夹名 %Y%m%d:年月日
        file_dir =getCurrentDate("%Y%m%d")
        # save_dir是最终地址
        save_dir = root_path+file_dir
        # 利用os来查看路径是否存在,若不存在，则直接创建路径，
        if not os.path.exists(save_dir):
            os.mkdir(save_dir)
            # 然后修改权限:令用户拥有777的权限(拥有者有全部的权限和组用户拥有全部权限和其他用户拥有全部权限)
            os.chmod(save_dir,stat.S_IRWXU | stat.S_IRGRP | stat.S_IRWXO)
        # file_name：文件名。得到一个 扩展的 文件名
        file_name = str(uuid.uuid4()).replace("-","")+"."+ext
        # 存储：路径+文件名
        file.save("{0}/{1}".format( save_dir,filename ))

        # 在线管理：存图片到数据库 =>从数据库中取出文件展示：Upload.py
        model_image = Image()
        model_image.file_key = file_dir+"/"+filename
        model_image.created_time =getCurrentDate()
        db.session.add(model_image)
        db.session.commit()

        # 存储成功后返回信息  file_key:日期加文件名
        resp['data']={
            'file_key':file_dir+"/"+filename
        }
        return resp